package com.adinnet.api.appVersion.service.impl;

import com.adinnet.api.appVersion.model.AppVersion;
import com.adinnet.api.appVersion.mapper.AppVersionMapper;
import com.adinnet.api.appVersion.model.vo.AppVersionResp;
import com.adinnet.api.appVersion.service.AppVersionService;
import com.adinnet.common.utils.StringUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.api.R;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * <p>
 * app版本管理 服务实现类
 * </p>
 *
 * @author liukp
 * @since 2020-09-23
 */
@Service
public class AppVersionServiceImpl extends ServiceImpl<AppVersionMapper, AppVersion> implements AppVersionService {

    /**
     * @description 查询全部app版本
     * @author
     * @param
     * @createTime 2020/12/11 11:05
     */
    @Override
    public List<AppVersion> list(Integer appType){
        QueryWrapper queryWrapper=new QueryWrapper();
        if(appType!=null && appType.intValue()>0){
            queryWrapper.eq("app_type",appType);
        }
        queryWrapper.eq("status",1);
        queryWrapper.eq("deleted",0);
        queryWrapper.orderByDesc("id");
        return baseMapper.selectList(queryWrapper);
    }

    /**
     * 根据平台类型和当前版本查询最新版本信息，并且根据当前版本判断是否要强制更新（有一个版本需要强制更新就需要强制更新）
     * 如果后台没有维护当前的版本，默认不更新（处理app的版本已升级但是后台还未维护app最新版本的情况,或者app传的版本不在后台数据库里）
     * @param appType
     * @param version
     * @return
     */
    @Override
    public AppVersionResp getAppVersion(Integer appType,String version) {
        Boolean isUpdate=false;
        Boolean forced=false;
        AppVersionResp versionResp = new AppVersionResp();
        QueryWrapper<AppVersion>  queryWrapper=new QueryWrapper();
        QueryWrapper<AppVersion>  queryWrapper1=new QueryWrapper();
        QueryWrapper<AppVersion>  queryWrapper2=new QueryWrapper();
        if(appType!=null && appType.intValue()>0){
            queryWrapper.eq("app_type",appType);
            queryWrapper1.eq("app_type",appType);
            queryWrapper2.eq("app_type",appType);
        }
        queryWrapper.eq("status",1)
                .eq("deleted",0)
                .orderByDesc("create_time")
                .last("limit 1");
        //最新的版本
        AppVersion appVersion = baseMapper.selectOne(queryWrapper);
        if(appVersion!=null){
            BeanUtils.copyProperties(appVersion,versionResp);
            //当前版本为最新版本就不更新,不是就更新
            //如果app没有传版本号的话也不要更新
            if(!(StringUtil.isBlank(version)||StringUtil.isBlank(appVersion.getVersionNo()))){
                if(!version.equals(appVersion.getVersionNo())){
                    isUpdate=true;
                    queryWrapper1.eq("status",1)
                            .eq("deleted",0)
                            .eq("version_no",version)
                            .orderByDesc("create_time")
                            .last("limit 1");
                    AppVersion appVersion1 = baseMapper.selectOne(queryWrapper1);
                    //如果存在当前版本，就判断是否有比当前版本更新的需要强制更新的版本，从而决定最新的版本是否需要更新
                    //如果当前版本号的版本后台还没有上传，app也不需要更新
                    if(appVersion1!=null){
                        queryWrapper2.eq("status",1)
                                .eq("deleted",0)
                                .eq("forced",1)
                                .gt("create_time",appVersion1.getCreateTime())
                                .orderByDesc("create_time")
                                .last("limit 1");
                        AppVersion appVersion2 = baseMapper.selectOne(queryWrapper2);
                        if(appVersion2!=null){
                            forced=true;
                        }
                    }else{
                        isUpdate=false;
                    }
                }
            }
        }
        versionResp.setIsUpdate(isUpdate);
        versionResp.setForced(forced);
        return versionResp;
    }
}
